\chapter*{序}
\addcontentsline{toc}{chapter}{序}
\begin{quotation}
...这个世界上有两种设计软件的方法：一种是使设计尽量的简化，以至于明显没有任何缺陷；而另一种是使设计尽量的复杂，以至于找不到明显的缺陷。第一种方法更加困难。
\begin{flushright}
\textit{ -- Tony Hoare，1980 ACM图灵奖演讲}
\end{flushright}
\end{quotation}
这本书讲述了一种以简单、清晰和优雅为关键目标的编程方法。更具体的说，它是一本使用Haskell语言介绍这种函数式编程方法的入门书籍。

函数式编程与当前大多数编程语言比如Java，C++，C和Visual
Basic所提倡的风格相差很大。特别是当前大多数语言是与底层硬件紧密关联的，在这种意义上，编程的基本思想就是修改存储的值。与此相反，Haskell则提倡一种更为抽象的编程风格，这种风格的基本思想则是将函数应用于参数。正如我们将要看到的，站上更高的层次可以让我们拥有更为简单的程序，并且支持一系列强大的构造和推导程序的新方法。

本书主要面对具备大专水平的学习计算机科学的学生，但也同样广泛适用于那些想了解和学习Haskell编程的读者。你不需要拥有任何编程经验，所有的概念都从基本原理讲起，并伴以精心挑选的例子。

本书使用的Haskell版本是Haskell
98，Haskell语言的标准版本，Haskell设计者花费了15年才最终发布了这个标准。由于这里仅仅是入门引导，所以我们不会去涉及
Haskell语言以及其相关库的所有方面。本书大约有一半内容是专门介绍该语言的主要特点的，另一半则包括了Haskell编程的例子和案例研究。每个章节还包括了一系列的习题以及关于进一步阅读更高级、更专业主题的建议。

本书基于课程材料编写而成，这些课程材料在诺丁汉大学经过了多年的改进和课程测试。通过20学时的授课以及大约40小时的自学、实验室实践和编程作业，你就可以学完本书的大部分内容。然而，你还需要更多的时间详细学习一下后面的一些章节以及一些编程例子。

本书的官方网站提供了一系列辅助资料，包括每个章节的幻灯片和一些扩展例子的Haskell代码。教师还可以通过发送电邮到solutions@cambridge.org得到每个章节练习题的标准答案以及大量带有标准答案的试题集。

\begin{flushleft}
致谢\\
\end{flushleft}

诺丁汉大学编程社团为函数式编程的研究与教学提供了一个极好的环境。感谢学校提供假期让我可以进行本书的写作。感谢所有学生和讲师们关于我的Haskell课程的反馈;
感谢Thorsten Altenkirch, Neil Ghani, Mark Jones (现在在波特兰州), Conor McBrideh和Henrik Nilsson在FOP社区与我进行的关于函数式编程的想法以及如何表达这些想法的交流和讨论。

我还要感谢David Tranah和Dawn Preston在剑桥大学出版社出色的编辑工作; 感谢Mark
Jones的Haskell解释器; 感谢Ralf Hinze和Andres Loh提供的lhs2TeX排版系统;感谢Rik
van Geldrop和Jaap van der Woude关于使用本书草稿的反馈; 感谢Kees van den Broek,
Frank Heitmann和 Bill Tonkin指出的本书的错误;感谢Ian
Bayley和所有匿名评审者极富价值的评论;感谢Joel Wright提供的倒计时程序。

\begin{flushright}
Graham Hutton\\
诺丁汉, 2006
\end{flushright}
